package jbl.service.impl;


import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import jbl.dao.DaLogDaoI;
import jbl.dao.TdaDaoI;
import jbl.dao.ZtDaoI;
import jbl.model.Code_zt;
import jbl.model.Tda;
import jbl.model.Tda_log;
import jbl.model.Tuser;
import jbl.pageModel.DaLog;
import jbl.pageModel.DataGrid;
import jbl.service.DaLogServiceI;
import jbl.util.Encrypt;
import jbl.util.JblTool;
import jbl.util.Json;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("daLogService")
public class DaLogServiceImpl implements DaLogServiceI {


	
	private TdaDaoI daDao;
	
	private DaLogDaoI daLogDao;
	
	private ZtDaoI ztDao;
	
	@Autowired
	public void setZtDao(ZtDaoI ztDao) {
		this.ztDao = ztDao;
	}
	
	@Autowired
	public void setDaLogDao(DaLogDaoI daLogDao) {
		this.daLogDao = daLogDao;
	}
	
	@Autowired
	public void setDaDao(TdaDaoI daDao) {
		this.daDao = daDao;
	}

	@Override
	public DataGrid treegrid(DaLog daLog) {
		DataGrid dg = new DataGrid();
		try {
			String hql = " from Tda_log t where 1=1 ";
			Map<String, Object> params = new HashMap<String, Object>();
			hql = addWhere(hql, daLog, params);
			String totalHql = "select count(*) " + hql;
			hql = addOrder(hql , daLog);
			List<Tda_log> list = daLogDao.find(hql, params,daLog.getPage(), daLog.getRows());
			if(null != list && list.size() > 0){
				List<DaLog> daLogList = new ArrayList<DaLog>();
				for(Tda_log tdaLog : list){
					DaLog dalog = new DaLog();
					BeanUtils.copyProperties(tdaLog, dalog);
					foreignKey(tdaLog, dalog);
					
					daLogList.add(dalog);
				}
				dg.setRows(daLogList);
			}
			dg.setTotal(daLogDao.count(totalHql));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return dg;
	}
	
	private String addWhere(String hql , DaLog dalog , Map<String, Object> params){
		if(null != dalog.getDaId() && !"".equals(dalog.getDaId())){
			hql += " and t.tda.id like '%"+dalog.getDaId()+"%'";
		}
		if(dalog.getStartCjsj()!=null&&!dalog.getStartCjsj().equals("")){
			hql+=" and t.cjsj>=:start";
			params.put("start",dalog.getStartCjsj());
		}
		if(dalog.getEndCjsj()!=null&&!dalog.getEndCjsj().equals("")){
			hql+=" and t.cjsj<=:end";
			params.put("end",dalog.getEndCjsj());
		}
		
		if(null != dalog.getZtId() && !"".equals(dalog.getZtId())){
			hql+=" and t.zt.id=:ztId ";
			params.put("ztId", dalog.getZtId());
		}
		return hql;
	}
	
	private String addOrder( String hql , DaLog dalog){
		if(null != dalog.getSort()){
			if(dalog.getSort().equals("daId")){
				dalog.setSort("tda.id");
			}
			if(dalog.getSort().equals("ztName")){
				dalog.setSort("zt.id");
			}
			if(dalog.getSort().equals("addUserName")){
				dalog.setSort("tuser.id");
			}
			if(dalog.getSort().equals("editUserName")){
				dalog.setSort("tuser1.id");
			}
			hql += " order by t."+dalog.getSort() +" " + dalog.getOrder();
		}
		return hql;
	}
	
	private void foreignKey(Tda_log tdaLog, DaLog dalog){
		Tuser tuser = tdaLog.getTuser();
		if(null != tuser){
			dalog.setAddUserName(tuser.getName());
		}
		Tuser tuser1 = tdaLog.getTuser1();
		if(null != tuser1){
			dalog.setEditUserName(tuser1.getName());
		}
		Tda tda = tdaLog.getTda();
		if(null != tda){
			dalog.setDaId(tda.getId());
		}
		Code_zt zt = tdaLog.getZt();
		if(null != zt){
			dalog.setZtName(zt.getZt());
			dalog.setIconCls(zt.getIconCls());
		}
	}
	

	@Override
	public Json add(DaLog daLog) {
		Json j = new Json();
		String ids = daLog.getIds();
		if(ids != null){
			for (String id : ids.split(",")) {
				if(!id.trim().equals("")){
					Tda tda = daDao.get(Tda.class, id);
					if(tda.getZt().getId().equals(daLog.getZtId())){
						j.setMsg("编号为-"+tda.getId()+"-的档案信息已"+tda.getZt().getZt());
						return j;
					}	
					Code_zt zts = ztDao.get(Code_zt.class, daLog.getZtId());
						
					if(null != zts.getZts()){
						if(tda.getZt().getId().equals(zts.getZts().getId())){
							j.setMsg("编号为-"+tda.getId()+"-的档案信息"+zts.getZts().getZt());
							return j;
						}
					}
					Code_zt zt = new Code_zt();
					zt.setId(daLog.getZtId());
					tda.setZt(zt);
					tda.setTuser1(JblTool.getTuser());
									
					Tda_log  tda_log = new Tda_log();
					tda_log.setId(Encrypt.createUUID());
					tda_log.setBz(daLog.getBz());
					tda_log.setZt(zt);
					tda_log.setTuser(JblTool.getTuser());
					tda_log.setTda(tda);
					tda_log.setFlag("F");
					tda_log.setCjsj(new Timestamp(new Date().getTime()));
					daLogDao.save(tda_log);
					
					daDao.update(tda);
				}
			}
		}
		j.setMsg("申请成功");
		j.setSuccess(true);
		return j;
	}

	@Override
	public Json edit(DaLog daLog) {
		Json j = new Json();
		String ids = daLog.getIds();
		if(ids != null){
			for (String id : ids.split(",")) {
				if(!id.trim().equals("")){
					Tda_log tda_log = daLogDao.get(Tda_log.class, id);
					
					Code_zt zt  = tda_log.getZt();
					if(null != zt.getZts()){
						tda_log.setZt(zt.getZts());
					}else{
						j.setMsg("申请档案信息没有父级处理状态!");
						return j;
					}
					tda_log.setTuser1(JblTool.getTuser());
					tda_log.setFlag("T");
					tda_log.setEditsj(new Date());
					tda_log.setBz1(daLog.getBz1());
					daLogDao.save(tda_log);
					Tda tda = tda_log.getTda();
					if(null != tda){
						tda.setZt(zt.getZts());
						daDao.update(tda);
					}
				}
			}
		}
		j.setMsg("处理成功");
		j.setSuccess(true);
		return j;
	}

	@Override
	public DataGrid dataGrid(DaLog daLog) {
		DataGrid dg = new DataGrid();
		try {
			String hql = " from Tda_log t where t.flag = 'F' ";
			Map<String, Object> params = new HashMap<String, Object>();
			hql = addWhere(hql, daLog, params);
			String totalHql = "select count(*) " + hql;
			hql = addOrder(hql , daLog);
			List<Tda_log> list = daLogDao.find(hql,params, daLog.getPage(), daLog.getRows());
			if(null != list && list.size() > 0){
				List<DaLog> daLogList = new ArrayList<DaLog>();
				for(Tda_log tdaLog : list){
					DaLog dalog = new DaLog();
					BeanUtils.copyProperties(tdaLog, dalog);
					foreignKey(tdaLog, dalog);
					
					daLogList.add(dalog);
				}
				dg.setRows(daLogList);
			}
			dg.setTotal(daLogDao.count(totalHql,params));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return dg;
	}

	@Override
	public Json fashEdit(DaLog daLog) {
		System.out.println(daLog.getDaId());
		Json j = new Json();
		
		String hql = "from Tda_log t where t.tda.id=:daId and t.flag = 'F' order by t.cjsj Desc ";
		Map<String, Object> params = new  HashMap<String, Object>();
		params.put("daId", daLog.getDaId());
		List<Tda_log> list = daLogDao.find(hql, params);
		if(null != list && list.size() > 0){
			Tda_log tda_log =  list.get(0);
			
			Code_zt zt  = tda_log.getZt();
			if(null != zt.getZts()){
				tda_log.setZt(zt.getZts());
			}else{
				j.setMsg("申请档案信息没有父级处理状态!");
				return j;
			}
			tda_log.setTuser1(JblTool.getTuser());
			tda_log.setFlag("T");
			tda_log.setEditsj(new Date());
			tda_log.setBz1(daLog.getBz1());
			daLogDao.save(tda_log);
			Tda tda = tda_log.getTda();
			if(null != tda){
				tda.setZt(zt.getZts());
				daDao.update(tda);
			}
			j.setMsg("编号-"+daLog.getDaId()+"-"+zt.getZt()+"成功");
			j.setSuccess(true);
			return j;
		}else{
			j.setMsg("未找到申请调阅信息!");
			return j;
		}
	}
}
